IAM Identity Center のユーザー・グループ操作で役立つAWS CLIエイリアスを作ってみる
IAM Identity Center の ユーザー・グループ操作を楽にすべく、 AWS CLI のエイリアスを作ってみました。
以降で作ったエイリアスと使用例を紹介します。
なお、以降はIAM Identity Center の独自IDストアを使っている前提で進めます。
前提: そもそも AWS CLIのエイリアスとは
エイリアスを使うことでコマンドやスクリプトのショートカットを作成できます。 頻繁に使うコマンドがある場合に役立ちます。
設定ファイル ~/.aws/cli/alias
を編集することで適用できます。
例えば以下のような alias ファイルを作成すると、 aws whoami
コマンドが使えるようになります。
[toplevel] whoami = sts get-caller-identity
$ aws whoami { "UserId": "AROAEXAMPLE:cm-kawahara.masahiro", "Account": "111111111111", "Arn": "arn:aws:sts::111111111111:assumed-role/cm-kawahara.masahiro/cm-kawahara.masahiro" }
詳細は以下ドキュメントを御覧ください。
作成したエイリアス
以下のようなエイリアスを作成しました。 ( Gist に同じものを上げています )
[toplevel] whoami = sts get-caller-identity ### IAM Identity Center(SSO) sso-store-id = sso-admin list-instances \ --query "Instances[0].IdentityStoreId" --output text --no-paginate sso-user-id = !f() { store_id="$1" user_email="$2" aws identitystore get-user-id --output text \ --identity-store-id "$store_id" \ --alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"emails.value\",\"AttributeValue\":\"${user_email}\"}}" \ --query "UserId" };f sso-group-id = !f() { store_id="$1" group_name="$2" aws identitystore get-group-id --output text \ --identity-store-id "$store_id" \ --alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"displayName\",\"AttributeValue\":\"${group_name}\"}}" \ --query "GroupId" };f sso-create-membership = !f () { store_id="$1" group_name="$2" user_email="$3" group_id=$(aws sso-group-id "$store_id" "$group_name") user_id=$(aws sso-user-id "$store_id" "$user_email") if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then aws identitystore create-group-membership \ --identity-store-id "$store_id" \ --group-id "$group_id" \ --member-id UserId="$user_id" fi };f sso-membership = !f () { store_id="$1" group_name="$2" user_email="$3" group_id=$(aws sso-group-id "$store_id" "$group_name") user_id=$(aws sso-user-id "$store_id" "$user_email") if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then aws identitystore get-group-membership-id --output text \ --identity-store-id "$store_id" \ --group-id "$group_id" \ --member-id UserId="$user_id" \ --query "MembershipId" fi };f sso-delete-membership = !f () { store_id="$1" group_name="$2" user_email="$3" membership_id=$(aws sso-membership "$store_id" "$group_name" "$user_email") if [ "$membership_id" != "" ];then aws identitystore delete-group-membership \ --identity-store-id "$store_id" \ --membership-id "$membership_id" fi };f
以降で作ったコマンドと使用例を紹介します。
sso-store-id
(Identity Store ID を取得)
sso-store-id = sso-admin list-instances \ --query "Instances[0].IdentityStoreId" --output text --no-paginate
ユーザー・グループ周りの操作は、ほぼほぼ Identity Store ID がパラメータに必要になってきます。それを簡単に取得します。
▼ 使用例
$ aws sso-store-id d-example
sso-user-id
(メールアドレスからユーザーIDを取得)
sso-user-id = !f() { store_id="$1" user_email="$2" aws identitystore get-user-id --output text \ --identity-store-id "$store_id" \ --alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"emails.value\",\"AttributeValue\":\"${user_email}\"}}" \ --query "UserId" };f
メールアドレスからユーザーIDを取得します。
▼ 使用例
$ aws sso-user-id $(aws sso-store-id) tanaka.taro@example.com 8774example-1111-2222-3333-444444444
sso-group-id
(グループ表示名からグループIDを取得)
sso-group-id = !f() { store_id="$1" group_name="$2" aws identitystore get-group-id --output text \ --identity-store-id "$store_id" \ --alternate-identifier "{\"UniqueAttribute\":{\"AttributePath\":\"displayName\",\"AttributeValue\":\"${group_name}\"}}" \ --query "GroupId" };f
グループ表示名からグループIDを取得します。
▼ 使用例
$ aws sso-group-id $(aws sso-store-id) ExampleGroup 0754daf8-1111-2222-f66a-afdexample
sso-membership
(ユーザーのグループ所属IDを取得)
sso-membership = !f () { store_id="$1" group_name="$2" user_email="$3" group_id=$(aws sso-group-id "$store_id" "$group_name") user_id=$(aws sso-user-id "$store_id" "$user_email") if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then aws identitystore get-group-membership-id --output text \ --identity-store-id "$store_id" \ --group-id "$group_id" \ --member-id UserId="$user_id" \ --query "MembershipId" fi };f
ユーザーがグループに所属している場合の、所属ID(membership id) を取得します。 所属IDはグループからの所属解除などのコマンドのパラメータとして必要になってきます。
前提として sso-user-id
と sso-group-id
が必要です。
▼ 使用例
$ aws sso-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com b704cab8-1111-2222-ec1b-2286example
sso-create-membership
(ユーザーをグループに所属させる)
sso-create-membership = !f () { store_id="$1" group_name="$2" user_email="$3" group_id=$(aws sso-group-id "$store_id" "$group_name") user_id=$(aws sso-user-id "$store_id" "$user_email") if [ "$group_id" != "" ] && [ "$user_id" != "" ]; then aws identitystore create-group-membership \ --identity-store-id "$store_id" \ --group-id "$group_id" \ --member-id UserId="$user_id" fi };f
ユーザーをグループに所属させます。
前提として sso-user-id
と sso-group-id
が必要です。
▼ 使用例
$ aws sso-create-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com IdentityStoreId: d-example MembershipId: b754aa18-1111-2222-e421-9c65example
sso-delete-membership
(ユーザーをグループから脱退させる)
sso-delete-membership = !f () { store_id="$1" group_name="$2" user_email="$3" membership_id=$(aws sso-membership "$store_id" "$group_name" "$user_email") if [ "$membership_id" != "" ];then aws identitystore delete-group-membership \ --identity-store-id "$store_id" \ --membership-id "$membership_id" fi };f
ユーザーをグループから脱退させます。
前提として sso-membership
が必要です。
▼ 使用例
$ aws sso-delete-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com # 脱退させたので以下コマンドはエラーになる $ aws sso-membership $(aws sso-store-id) ExampleGroup tanaka.taro@example.com An error occurred (ResourceNotFoundException) when calling the GetGroupMembershipId operation: Group membership not found for given Pool/Group/Member.
おわりに
以上、AWS CLIのエイリアスを使って IAM Identity Center 周りのショートカットを作ってみました。
参考になれば幸いです。